﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.ServiceModel;
using System.Runtime.Serialization;

namespace K.EnterpriseLibary
{
    /// <summary>
    /// SOAP异常类
    /// 用于创建可序列化的异常类，从而将服务器端的异常信息传递给客户端
    /// 这里可以自定义异常信息
    /// </summary>
    /// 

    [DataContract]
    [Serializable] //可序列化
    public class ExceptionInfo
    {
        [DataMember]
        public string Message { get; set; } //自定义消息
        [DataMember]
        public SortedList<string, object> ExtendParameters { get; set; } //异常列表
        [DataMember]
        public byte[] InnerExceptionData { get; set; } //内部异常？？暂时不知道用在哪里

        public Exception InnerException
        {
            get
            {
                if(InnerExceptionData.IsNull())
                    return null;
                return InnerExceptionData.BinaryToObject().Cast<Exception>();
            }

        }

        public ExceptionInfo()
        {
            ExtendParameters = new SortedList<string, object>();
        }

        public ExceptionInfo(string message, SortedList<string,object> extendParameters)
        {
            Message = message;
            if(!extendParameters.IsNull())
                ExtendParameters = extendParameters;
        }

        public ExceptionInfo(string message, SortedList<string,object> extendParameters, System.Exception innerException)
            : this(message,extendParameters)
        {
            if(!innerException.IsNull())
            {
                InnerExceptionData = innerException.ObjectToBinary();
            }
        }

    }
}
